

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;

public class TxtReader {
    public static void main(String[] args) {
        // 1. 定义文件路径（项目内 resources 下的相对路径）
        File file = new File("");

        try {
            // 2. 读取文件所有行（显式指定 UTF-16LE 编码）
            List<String> lines = FileUtils.readLines(file, StandardCharsets.UTF_16LE);

            // 3. 处理每一行（自定义逻辑，示例：每行前加「修改后：」）
            List<String> modifiedLines = processLines(lines);

            // 4. 写回原文件（显式指定 UTF-16LE 编码，覆盖原内容）
            // 改用字符串编码，兼容旧版本
            FileUtils.writeLines(file, "UTF-16LE", modifiedLines, false);

            System.out.println("文件修改并保存成功！");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 自定义行处理逻辑
     * @param lines
     * @return 修改后的行列表
     */
    public static List<String> processLines(List<String> lines) {

        // 输出类型
        String type = "";
        int doRow,doPage,doNum;
        int maxRow = lines.size() - 1;
        String id = "";
        String tempId = "";

//        List<String> result = new ArrayList<>();

        for (int i = 0; i < lines.size() -1; i++) {

            // 判断是否是输出点,
//            if (lines.get(i).contains("PgDO") & lines.get(i).contains("PgAO")) {
            if (lines.get(i).contains("PgDO")) {
                // 是输出点，看是否有其他地方引用
                String str = lines.get(i + 1);
                id = SubstringExtractor.extractCode(str);
                if (id.length() >= 4){

                    /**
                     * 获取页号doPage和块号doNum
                     * 解决因为刚创建页的时候逻辑与其他不一样的问题
                     *
                     * Page, 1:2, 8 x10ms 6 0 0
                     * 	Description=output
                     * 	RevTime=2025-06-13 19:30:33
                     * 	Sub=
                     * 	Func, PgDO, 1:10, (450,150), 1, 0
                     * 		In= ,Null\浆液循环泵A运行LF113_7,
                     * 		Para=
                     * 		Out= ,
                     * Page=1,output
                     * 	FuncEnd
                     * 	Func, PgDO, 2:20, (450,180), 1, 0
                     * 		In= ,Null\浆液循环泵B停止LF120_7,
                     * 		Para=
                     * 		Out= ,
                     *
                     * 	暂时碰到有两种情况，所以page就是由","":"或"="","包含起来
                     * 	块号是由","":"
                     */
                    int num = 2;
                    String doPageRow = lines.get(i - num);
                    while (!doPageRow.startsWith("Page")){
                        num += 1;
                        doPageRow= lines.get(i - num);
                    }
                    String a = String.valueOf(doPageRow.charAt(4));
                    String b = ",";
                    if (a.equals(",")) b=":";
                    doPage = Integer.parseInt(SubstringExtractor.extractBetweenAAndB(doPageRow,a , b));
                    doNum = Integer.parseInt(SubstringExtractor.extractBetweenAAndB(lines.get(i),",",":"));

                    /**
                     * 	Func, PgDI, 1:10, (90,105), 1, 0
                     * 		In= ,
                     * 		Para= B65535,65535,RefNotExist,
                     * 		Out= ,0\浆液循环泵A运行LF113_7,
                     *
                     * 	PgDI之下，PgDI这一行+2 就是引脚使用，PgDI+3则是引脚号
                     */
                    for (int j = 0; j < lines.size() -1; j++) {
                        if (lines.get(j).contains("PgDI")){
                            tempId = SubstringExtractor.extractCode(lines.get(j + 3));
                            if (tempId.equals(id)){
                                String para ="\t\tPara= B"+doPage+","+doNum+",,";
                                lines.set(j+2,para);
                            }
                        }
                    }
                }
            }
        }
        return lines;
    }


}